A suggested way to tease apart what makes certain species more likely to respond positively to different nutrient enrichment treatments is through some variety of decision tree.

When we have a set of hierarchical predictors that range from site-level predictors (precip, temp, species richness) to more individual-level predictors (functional type, relative rank abundance), decision trees can offer a reasonably intuitive way to model and interpet interactions between them.

What features of a community best predict response?

Check if previous code has any solutions

library(tidyverse);library(data.table);library(dtplyr)

ttable <- fread("../Data/tuningtable_normalized.csv")

specscores_full <- read.csv("../Data/specscores.csv")

taxonomy <- fread('C:/Users/ebatz/Dropbox/NutNet Data/Nutnet-site-taxonomy.csv',
               stringsAsFactors = FALSE,
               na.strings = c('NA','NULL'))

site.covars <- read.csv("../Data/site_covars.csv")

site_pvals = read.csv("composition_pvalues.csv", header = TRUE, stringsAsFactors = FALSE)
head(site_pvals)

Joining tables into master

pretrt = ttable %>% group_by(site_code, Taxon, block) %>%
  summarise(pretrtcover = mean(pret_covN, pret_covControl, pret_covK, pret_covP)) %>%
  group_by(site_code, Taxon) %>%
  summarise(pretrtcover = mean(pretrtcover)) %>%
  mutate(species = gsub("\\.", " ", Taxon)) %>%
  select(-Taxon)

specscores = specscores_full %>%
  select(-X) %>%
  gather(key = "species",
         value = "coef", 
         -c(site, trt)) %>%
  mutate(species = gsub("\\.", " ", species)) %>%
  left_join(pretrt, by = c(site = "site_code", species = "species"))

taxonomy = taxonomy %>% mutate(species = gsub("\\.", " ", Taxon))

specscores = specscores %>% inner_join(taxonomy, by = c(site = "site_code", species = "species"))

specscores = specscores %>% left_join(site_pvals %>% select(site, trt_K, trt_P, trt_N))

resptable = specscores %>% left_join(site.covars, by = c(site = "site_code"))

head(resptable)
df = resptable %>% filter(trt_N < .05) %>% filter(trt == "trt_N")
df$functional_group <- as.factor(df$functional_group)
df$ps_path <- as.factor(df$ps_path)
df$local_provenance <- as.factor(df$local_provenance)
df$local_lifespan <- as.factor(df$local_lifespan)
df$local_lifeform <- as.factor(df$local_lifeform)
df %>% ggplot(aes( x = log(pretrtcover),
                   y = coef,
                   color = functional_group)) + geom_point() + 
  stat_smooth(method = "lm", fullrange = TRUE, se = FALSE)

df = resptable %>% filter(trt_K < .05) %>% filter(trt == "trt_K")
df$functional_group <- as.factor(df$functional_group)
df$ps_path <- as.factor(df$ps_path)
df$local_provenance <- as.factor(df$local_provenance)
df$local_lifespan <- as.factor(df$local_lifespan)
df$local_lifeform <- as.factor(df$local_lifeform)
df %>% ggplot(aes( x = log(pretrtcover),
                   y = coef,
                   color = functional_group)) + geom_point() + 
  stat_smooth(method = "lm", fullrange = TRUE, se = FALSE)

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpBIHN1Z2dlc3RlZCB3YXkgdG8gdGVhc2UgYXBhcnQgd2hhdCBtYWtlcyBjZXJ0YWluIHNwZWNpZXMgbW9yZSBsaWtlbHkgdG8gcmVzcG9uZCANCnBvc2l0aXZlbHkgdG8gZGlmZmVyZW50IG51dHJpZW50IGVucmljaG1lbnQgdHJlYXRtZW50cyBpcyB0aHJvdWdoIHNvbWUgdmFyaWV0eSANCm9mIGRlY2lzaW9uIHRyZWUuDQoNCldoZW4gd2UgaGF2ZSBhIHNldCBvZiBoaWVyYXJjaGljYWwgcHJlZGljdG9ycyB0aGF0IHJhbmdlIGZyb20gc2l0ZS1sZXZlbCBwcmVkaWN0b3JzDQoocHJlY2lwLCB0ZW1wLCBzcGVjaWVzIHJpY2huZXNzKSB0byBtb3JlIGluZGl2aWR1YWwtbGV2ZWwgcHJlZGljdG9ycyAoZnVuY3Rpb25hbCANCnR5cGUsIHJlbGF0aXZlIHJhbmsgYWJ1bmRhbmNlKSwgZGVjaXNpb24gdHJlZXMgY2FuIG9mZmVyIGEgcmVhc29uYWJseSBpbnR1aXRpdmUgDQp3YXkgdG8gbW9kZWwgYW5kIGludGVycGV0IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZW0uDQoNCiMgV2hhdCBmZWF0dXJlcyBvZiBhIGNvbW11bml0eSBiZXN0IHByZWRpY3QgcmVzcG9uc2U/DQoNCi0gUHJldHJ0IGFidW5kYW5jZQ0KICAgIC0gQXNzaWduIGEgemVybyBpZiBtaXNzaW5nDQotIEZ1bmN0aW9uYWwgdHlwZQ0KLSBFeG90aWMgLyBuYXRpdmUgc3RhdHVzDQotIEFueSBzb3J0IG9mIG90aGVyIGZ1bmN0aW9uYWwgY2hhcmFjdGVyaXN0aWNzIHdvcnRoIGFkZGluZz8NCg0KYGBge3J9DQpoZWFkKGJpbmRfY29scyhhdHRyLm1hdCwgY292ZXIubWF0KSkNCmBgYA0KDQoNCg0KDQoNCg0KDQojIENoZWNrIGlmIHByZXZpb3VzIGNvZGUgaGFzIGFueSBzb2x1dGlvbnMNCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSk7bGlicmFyeShkYXRhLnRhYmxlKTtsaWJyYXJ5KGR0cGx5cikNCg0KdHRhYmxlIDwtIGZyZWFkKCIuLi9EYXRhL3R1bmluZ3RhYmxlX25vcm1hbGl6ZWQuY3N2IikNCg0Kc3BlY3Njb3Jlc19mdWxsIDwtIHJlYWQuY3N2KCIuLi9EYXRhL3NwZWNzY29yZXMuY3N2IikNCg0KdGF4b25vbXkgPC0gZnJlYWQoJ0M6L1VzZXJzL2ViYXR6L0Ryb3Bib3gvTnV0TmV0IERhdGEvTnV0bmV0LXNpdGUtdGF4b25vbXkuY3N2JywNCiAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwNCiAgICAgICAgICAgICAgIG5hLnN0cmluZ3MgPSBjKCdOQScsJ05VTEwnKSkNCg0Kc2l0ZS5jb3ZhcnMgPC0gcmVhZC5jc3YoIi4uL0RhdGEvc2l0ZV9jb3ZhcnMuY3N2IikNCg0Kc2l0ZV9wdmFscyA9IHJlYWQuY3N2KCJjb21wb3NpdGlvbl9wdmFsdWVzLmNzdiIsIGhlYWRlciA9IFRSVUUsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkNCmhlYWQoc2l0ZV9wdmFscykNCmBgYA0KDQojIEpvaW5pbmcgdGFibGVzIGludG8gbWFzdGVyDQpgYGB7cn0NCnByZXRydCA9IHR0YWJsZSAlPiUgZ3JvdXBfYnkoc2l0ZV9jb2RlLCBUYXhvbiwgYmxvY2spICU+JQ0KICBzdW1tYXJpc2UocHJldHJ0Y292ZXIgPSBtZWFuKHByZXRfY292TiwgcHJldF9jb3ZDb250cm9sLCBwcmV0X2NvdkssIHByZXRfY292UCkpICU+JQ0KICBncm91cF9ieShzaXRlX2NvZGUsIFRheG9uKSAlPiUNCiAgc3VtbWFyaXNlKHByZXRydGNvdmVyID0gbWVhbihwcmV0cnRjb3ZlcikpICU+JQ0KICBtdXRhdGUoc3BlY2llcyA9IGdzdWIoIlxcLiIsICIgIiwgVGF4b24pKSAlPiUNCiAgc2VsZWN0KC1UYXhvbikNCg0Kc3BlY3Njb3JlcyA9IHNwZWNzY29yZXNfZnVsbCAlPiUNCiAgc2VsZWN0KC1YKSAlPiUNCiAgZ2F0aGVyKGtleSA9ICJzcGVjaWVzIiwNCiAgICAgICAgIHZhbHVlID0gImNvZWYiLCANCiAgICAgICAgIC1jKHNpdGUsIHRydCkpICU+JQ0KICBtdXRhdGUoc3BlY2llcyA9IGdzdWIoIlxcLiIsICIgIiwgc3BlY2llcykpICU+JQ0KICBsZWZ0X2pvaW4ocHJldHJ0LCBieSA9IGMoc2l0ZSA9ICJzaXRlX2NvZGUiLCBzcGVjaWVzID0gInNwZWNpZXMiKSkNCg0KdGF4b25vbXkgPSB0YXhvbm9teSAlPiUgbXV0YXRlKHNwZWNpZXMgPSBnc3ViKCJcXC4iLCAiICIsIFRheG9uKSkNCg0Kc3BlY3Njb3JlcyA9IHNwZWNzY29yZXMgJT4lIGlubmVyX2pvaW4odGF4b25vbXksIGJ5ID0gYyhzaXRlID0gInNpdGVfY29kZSIsIHNwZWNpZXMgPSAic3BlY2llcyIpKQ0KDQpzcGVjc2NvcmVzID0gc3BlY3Njb3JlcyAlPiUgbGVmdF9qb2luKHNpdGVfcHZhbHMgJT4lIHNlbGVjdChzaXRlLCB0cnRfSywgdHJ0X1AsIHRydF9OKSkNCg0KcmVzcHRhYmxlID0gc3BlY3Njb3JlcyAlPiUgbGVmdF9qb2luKHNpdGUuY292YXJzLCBieSA9IGMoc2l0ZSA9ICJzaXRlX2NvZGUiKSkNCg0KaGVhZChyZXNwdGFibGUpDQpgYGANCg0KDQpgYGB7cn0NCmRmID0gcmVzcHRhYmxlICU+JSBmaWx0ZXIodHJ0X04gPCAuMDUpICU+JSBmaWx0ZXIodHJ0ID09ICJ0cnRfTiIpDQpkZiRmdW5jdGlvbmFsX2dyb3VwIDwtIGFzLmZhY3RvcihkZiRmdW5jdGlvbmFsX2dyb3VwKQ0KZGYkcHNfcGF0aCA8LSBhcy5mYWN0b3IoZGYkcHNfcGF0aCkNCmRmJGxvY2FsX3Byb3ZlbmFuY2UgPC0gYXMuZmFjdG9yKGRmJGxvY2FsX3Byb3ZlbmFuY2UpDQpkZiRsb2NhbF9saWZlc3BhbiA8LSBhcy5mYWN0b3IoZGYkbG9jYWxfbGlmZXNwYW4pDQpkZiRsb2NhbF9saWZlZm9ybSA8LSBhcy5mYWN0b3IoZGYkbG9jYWxfbGlmZWZvcm0pDQpkZiAlPiUgZ2dwbG90KGFlcyggeCA9IGxvZyhwcmV0cnRjb3ZlciksDQogICAgICAgICAgICAgICAgICAgeSA9IGNvZWYsDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSBmdW5jdGlvbmFsX2dyb3VwKSkgKyBnZW9tX3BvaW50KCkgKyANCiAgc3RhdF9zbW9vdGgobWV0aG9kID0gImxtIiwgZnVsbHJhbmdlID0gVFJVRSwgc2UgPSBGQUxTRSkNCmBgYA0KYGBge3J9DQpkZiA9IHJlc3B0YWJsZSAlPiUgZmlsdGVyKHRydF9QIDwgLjA1KSAlPiUgZmlsdGVyKHRydCA9PSAidHJ0X1AiKQ0KZGYkZnVuY3Rpb25hbF9ncm91cCA8LSBhcy5mYWN0b3IoZGYkZnVuY3Rpb25hbF9ncm91cCkNCmRmJHBzX3BhdGggPC0gYXMuZmFjdG9yKGRmJHBzX3BhdGgpDQpkZiRsb2NhbF9wcm92ZW5hbmNlIDwtIGFzLmZhY3RvcihkZiRsb2NhbF9wcm92ZW5hbmNlKQ0KZGYkbG9jYWxfbGlmZXNwYW4gPC0gYXMuZmFjdG9yKGRmJGxvY2FsX2xpZmVzcGFuKQ0KZGYkbG9jYWxfbGlmZWZvcm0gPC0gYXMuZmFjdG9yKGRmJGxvY2FsX2xpZmVmb3JtKQ0KZGYgJT4lIGdncGxvdChhZXMoIHggPSBsb2cocHJldHJ0Y292ZXIpLA0KICAgICAgICAgICAgICAgICAgIHkgPSBjb2VmLA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZnVuY3Rpb25hbF9ncm91cCkpICsgZ2VvbV9wb2ludCgpICsgDQogIHN0YXRfc21vb3RoKG1ldGhvZCA9ICJsbSIsIGZ1bGxyYW5nZSA9IFRSVUUsIHNlID0gRkFMU0UpDQpgYGANCg0KYGBge3J9DQpkZiA9IHJlc3B0YWJsZSAlPiUgZmlsdGVyKHRydF9LIDwgLjA1KSAlPiUgZmlsdGVyKHRydCA9PSAidHJ0X0siKQ0KZGYkZnVuY3Rpb25hbF9ncm91cCA8LSBhcy5mYWN0b3IoZGYkZnVuY3Rpb25hbF9ncm91cCkNCmRmJHBzX3BhdGggPC0gYXMuZmFjdG9yKGRmJHBzX3BhdGgpDQpkZiRsb2NhbF9wcm92ZW5hbmNlIDwtIGFzLmZhY3RvcihkZiRsb2NhbF9wcm92ZW5hbmNlKQ0KZGYkbG9jYWxfbGlmZXNwYW4gPC0gYXMuZmFjdG9yKGRmJGxvY2FsX2xpZmVzcGFuKQ0KZGYkbG9jYWxfbGlmZWZvcm0gPC0gYXMuZmFjdG9yKGRmJGxvY2FsX2xpZmVmb3JtKQ0KZGYgJT4lIGdncGxvdChhZXMoIHggPSBsb2cocHJldHJ0Y292ZXIpLA0KICAgICAgICAgICAgICAgICAgIHkgPSBjb2VmLA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gZnVuY3Rpb25hbF9ncm91cCkpICsgZ2VvbV9wb2ludCgpICsgDQogIHN0YXRfc21vb3RoKG1ldGhvZCA9ICJsbSIsIGZ1bGxyYW5nZSA9IFRSVUUsIHNlID0gRkFMU0UpDQpgYGANCg==